package xyz.yq56.easytool.utils.string;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;

import com.google.common.base.CaseFormat;

import xyz.yq56.easytool.utils.collection.CollectUtil;
import xyz.yq56.easytool.utils.nvll.NullUtil;

/**
 * @author yi qiang
 * @date 2021/9/19 21:39
 */
public class TextUtils extends StringUtils {

    /**
     * 将str按分割符得到list
     *
     * @param str   字符
     * @param regex 分割符号
     * @return list
     */
    public static List<String> strToList(String str, String regex) {
        if (NullUtil.isAndNull(str, regex)) {
            return Collections.emptyList();
        }
        return Arrays.stream(str.split(regex)).collect(Collectors.toList());
    }

    /**
     * 将str按 , 分割得到list
     *
     * @param str 字符
     * @return list
     */
    public static List<String> strToList(String str) {
        return strToList(str, ",");
    }

    /**
     * 指定字符是否在逗号分隔的字符串中
     * <br> isSplitStr("123,1", "23")
     *
     * @param str  逗号分隔的字符串
     * @param item 待判断的项
     * @return 是否包含
     */
    public static boolean isSplitStr(String str, String item) {
        return isSplitStr(str, item, ",");
    }

    /**
     * 指定字符是否在指定字符分隔的字符串中
     *
     * @param str  逗号分隔的字符串
     * @param item 待判断的项
     * @return 是否包含
     */
    public static boolean isSplitStr(String str, String item, String regex) {
        if (NullUtil.isNull(item)) {
            return false;
        }
        return (regex + str + regex).contains(regex + item + regex);
    }

    public static String join(Collection<String> collection, String regex) {
        return CollectUtil.isEmpty(collection) ? "" : String.join(regex, collection);
    }

    /**
     * 比较字符串是否相等,內部已判空，无需在意两个值是否为null
     *
     * @param str1 字符串1
     * @param str2 字符串2
     * @return 是否相等
     */
    public static boolean equals(String str1, String str2) {
        return Objects.equals(str1, str2);
    }

    /**
     * 小写驼峰转化为大写开头的驼峰
     *
     * @param str 小写驼峰格式
     * @return 大写驼峰
     */
    public static String upperCamel(String str) {
        return NullUtil.apply(str, item -> CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, item));
    }

    /**
     * 去除最后一个字符
     *
     * @param str 字符串
     * @return 去掉最后一个字符的字符串
     */
    public static String removeLastChar(String str) {
        if (str != null && str.length() > 1) {
            return str.substring(0, str.length() - 1);
        }
        return str;
    }

}
